package org.finesys.common.dataPermission.local;

import com.alibaba.ttl.TransmittableThreadLocal;
import org.finesys.common.dataPermission.annotation.DataPermission;

import java.util.LinkedList;

public class DataPermissionContextHolder {
    /**
     * ttl解决父子线程传值问题，由于方法存在嵌套，使用List
     */
    private static final ThreadLocal<LinkedList<DataPermission>> DATA_PERMISSIONS = TransmittableThreadLocal.withInitial(LinkedList::new);

    /**
     * 获得当前的数据权限注解
     *
     * @return 数据权限 注解
     */
    public static DataPermission get() {
        return DATA_PERMISSIONS.get().peekLast();
    }

    /**
     * 入栈数据权限注解
     */
    public static void add(DataPermission dataPermission) {
        DATA_PERMISSIONS.get().add(dataPermission);
    }

    /**
     * 出栈数据权限注解
     */
    public static void remove(DataPermission dataPermission) {
        DATA_PERMISSIONS.get().removeLast();
        if (DATA_PERMISSIONS.get().isEmpty()) {
            DATA_PERMISSIONS.remove();
        }
    }

}
